A development-only tool that intentionally exposes bugs before they reach production.
<StrictMode> renders no visible UI of its own — it opts the subtree inside it into extra development-only checks, most notably double-invoking component render functions and effect setup/cleanup. This is deliberate: it's designed to surface impure logic (side effects sneaking into render, or effects whose cleanup isn't truly idempotent) that would otherwise pass silently in normal development until it caused a real, harder-to-trace bug later.
This double-invocation only happens in development builds — production is completely unaffected — which is worth internalizing precisely because it means Strict Mode warnings should never be treated as noise to ignore; a component that breaks under double-invocation was never actually safe, Strict Mode just made that visible early. The deeper reason this exists is to prepare codebases for concurrent rendering, where React may genuinely start rendering a component, discard that work, and render again — so render logic and effects that can't survive being run twice were never truly compatible with where React was heading.
What you'll walk away knowing